home *** CD-ROM | disk | FTP | other *** search
- /* ==========================================================================
- **
- ** PObject.c
- **
- ** ©1991 WILLISoft
- **
- ** ==========================================================================
- */
-
- #include <exec/types.h>
- #include "PObject.h"
- #include "PObjectClass.h"
- #include "stdlib.h"
- #include "AmigaMem.h"
-
- /* EDB -- added version string */
- char *precognition_lib_version = "$VER: precognition.lib 2.1 (9.1.95)";
- /*
- ** This string needs to be in there somewhere for the
- ** AmigaDOS VERSION command to find it.
- */
-
- void SetObjectName( PObject *self, char *name );
-
- #ifdef VERBOSE
- void DumpClassChain( struct PObjectClass *class )
- {
- for( ; class != NULL; class = class->isa )
- {
- printf( "%s", class->ClassName );
- if( class->isa ) printf( "->" );
- }
- printf("\n");
- }
- #endif
-
-
- void PObject_CleanUp( PObject *self )
- {
- SetObjectName( self, NULL );
- }
-
-
-
- void CleanUp( PObject *self )
- {
- const struct PObjectClass *class;
- void *prev_cleaner = NULL;
-
-
- if( self )
- {
- /* call cleanup routines for entire parent hierarchy. */
- for( class = (struct PObjectClass *)self->isa;
- class != NULL;
- class = class->isa )
- {
- if( class->CleanUp )
- {
- if( (void *)class->CleanUp != prev_cleaner )
- {
- (*class->CleanUp)( self );
- prev_cleaner = (void *)class->CleanUp;
- }
- }
- }
- }
- }
-
-
- char *ClassName( PObject *self )
- {
- struct PObjectClass *class;
- char *name = NULL;
-
- if( self )
- if( class = (struct PObjectClass *)self->isa )
- name = class->ClassName;
-
- return name;
- }
-
- BOOL isa( PObject *self,
- const PClass *class )
- {
- const struct PObjectClass *self_class;
- struct PObjectClass *c;
-
- c = (struct PObjectClass *)class;
- if( self )
- {
- /* Traverse inheritence tree of self. */
- for ( self_class = self->isa;
- self_class != NULL;
- self_class = self_class->isa )
- {
- /*printf("isa(\"%s\", \"%s\")\n",*/
- /* self_class->ClassName, c->ClassName );*/
-
- if( self_class->ClassName == c->ClassName )
- {
- /*printf("Match!\n");*/
- return TRUE;
- }
- }
- }
-
- /*printf("No Match.\n");*/
- return FALSE;
- }
-
-
- char *ObjectName( PObject *self )
- {
- if( self ) return self->PObjectName;
- return NULL;
- }
-
- char *PObjectName( PObject *self )
- {
- return ObjectName( self );
- }
-
- void SetObjectName( PObject *self, char *name )
- {
- if( self == NULL )return;
-
- Afree( self->PObjectName );
- self->PObjectName = Astrdup( name );
- }
-
- BOOL PObject_elaborated = FALSE;
-
- struct PObjectClass PObject_Class;
-
- void PObjectClass_Init( struct PObjectClass *class )
- {
- class->isa = NULL;
- class->ClassName = "PObject";
- class->CleanUp = PObject_CleanUp;
- }
-
-
- const struct PObjectClass *PObjectClass( void )
- {
- if( ! PObject_elaborated )
- {
- PObjectClass_Init( &PObject_Class );
- PObject_elaborated = TRUE;
- }
-
- return &PObject_Class;
- }
-
- void PObject_Init( PObject *self )
- {
- self->isa = PObjectClass();
- self->PObjectName = NULL;
- }
-